package com.probiz.estore.order.util;

import org.apache.commons.lang.RandomStringUtils;

import com.probiz.estore.common.util.DateUtil;


/**
 *订单模块code生成Util 
 *
 */
public class OrderCodeGenerator {
	public static Integer MAX_TRY_TIME = 100; //最大尝试次数
	
	public static String SALES_ORDER_PREFIX = "D" ;//销售订单编号前缀(订首拼音字母)
	
	public static String ORDER_PAYMENT_PAY_PREFIX = "S" ;//收款单号前缀(收款拼音字母)
	
	public static String ORDER_PAYMENT_REFUND_PERFIX = "T"; //退款单号前缀（退款拼音字母）

	public static String ORDER_SHIPMENT_SHIP_PERFIX = "F"; //发货单号前缀（发货拼音字母）

	public static String ORDER_SHIPMENT_RETURN_PERFIX = "R"; //退货单号前缀（return）

	public static String ORDER_PICK_PERFIX = "B"; //备货单号前缀（备货拼音字母）
		
	
	//生成订单编码 （前缀一位字母）(年-两位数字) (月-两位数字)(日-两位数字)(六位随机数字)，共13位
	public static String generateOrderNo(){
		return SALES_ORDER_PREFIX+ DateUtil.fmtTodayToSix()+RandomStringUtils.random(6,false,true);
	}
	
	//生成收款单编码 （前缀一位字母）(年-两位数字) (月-两位数字)(日-两位数字)(六位随机数字)，共13位
	public static String generateOrderPaymentNo4Pay(){
		return ORDER_PAYMENT_PAY_PREFIX+ DateUtil.fmtTodayToSix()+RandomStringUtils.random(6,false,true);
	}
	
	//生成退款单编码 （前缀一位字母）(年-两位数字) (月-两位数字)(日-两位数字)(六位随机数字)，共13位
	public static String generateOrderPaymentNo4Refund(){
		return ORDER_PAYMENT_REFUND_PERFIX+ DateUtil.fmtTodayToSix()+RandomStringUtils.random(6,false,true);
	}

	//生成发货单编码 （前缀一位字母）(年-两位数字) (月-两位数字)(日-两位数字)(六位随机数字)，共13位
	public static String generateOrderShipmentNo4Ship(){
		return ORDER_SHIPMENT_SHIP_PERFIX+ DateUtil.fmtTodayToSix()+RandomStringUtils.random(6,false,true);
	}
	
	//生成退货单编码 （前缀一位字母）(年-两位数字) (月-两位数字)(日-两位数字)(六位随机数字)，共13位
	public static String generateOrderShipmentNo4Return(){
		return ORDER_SHIPMENT_RETURN_PERFIX+ DateUtil.fmtTodayToSix()+RandomStringUtils.random(6,false,true);
	}
	
	//生成备货单编码 （前缀一位字母）(年-两位数字) (月-两位数字)(日-两位数字)(六位随机数字)，共13位
	public static String generateOrderPickNo(){
		return ORDER_PICK_PERFIX+ DateUtil.fmtTodayToSix()+RandomStringUtils.random(6,false,true);
	}
	
	/**
	 * 由于可以多次支付，所以提交给支付网关的唯一订单编号必须在原订单后增加后缀，否则支付不成功（重复的订单号）
	 * @return
	 */
	public static String encodeOnlinePaymentOrderNo(String orderNo){
		return orderNo+"-"+RandomStringUtils.random(8,false,true);
	}
	/**
	 * 获得网关返回的在线订单号所对应的真实订单号
	 * @param onlineOrderNo
	 * @return
	 */
	public static String decodeOnlinePaymentOrderNo(String onlineOrderNo){
		String[] array = onlineOrderNo.split("-");
		return array[0];
	}
	
	
	
	

}
